package com.Oct_Six;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *811. 子域名访问计数
 * 网站域名 "discuss.leetcode.com" 由多个子域名组成。顶级域名为 "com" ，二级域名为 "leetcode.com" ，最低一级为 "discuss.leetcode.com" 。当访问域名 "discuss.leetcode.com" 时，同时也会隐式访问其父域名 "leetcode.com" 以及 "com" 。
 *
 * 计数配对域名 是遵循 "rep d1.d2.d3" 或 "rep d1.d2" 格式的一个域名表示，其中 rep 表示访问域名的次数，d1.d2.d3 为域名本身。
 *
 * 例如，"9001 discuss.leetcode.com" 就是一个 计数配对域名 ，表示 discuss.leetcode.com 被访问了 9001 次。
 * 给你一个 计数配对域名 组成的数组 cpdomains ，解析得到输入中每个子域名对应的 计数配对域名 ，并以数组形式返回。可以按 任意顺序 返回答案。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/subdomain-visit-count
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2022/10/06 15:17
 */

public class Solution811 {

    public List<String> subdomainVisits(String[] cpdomains) {
        List<String> ans=new ArrayList<>();
        Map<String,Integer> map=new HashMap<>();
        for (String s:cpdomains){
            int length=s.length(),index=0;
            while (index<length&&s.charAt(index)!=' ') index++;
            int cnt=Integer.parseInt(s.substring(0,index));
            int start=index+1;
            index=length-1;
            while (index>=start)
            {
                while (index>=start&&s.charAt(index)!='.') index--;
                String cur=s.substring(index+1);
                map.put(cur,map.getOrDefault(cur,0)+cnt);
                index--;
            }
        }
        for (String key:map.keySet())
        {
            ans.add(map.get(key)+" "+key);
        }
        return ans;
    }

    public static void main(String[] args) {
        Solution811 solution811=new Solution811();
        System.out.println(solution811.subdomainVisits(new String[]{"900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"}));
    }
}
